package com.yupi.yupicturebackend.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 操作日志注解
 * 用于记录用户操作行为
 * 
 * @author yupi
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface OperationLog {

    /**
     * 操作描述
     * @return 操作描述
     */
    String value() default "";

    /**
     * 操作类型
     * @return 操作类型
     */
    OperationType type() default OperationType.OTHER;

    /**
     * 业务模块
     * @return 业务模块
     */
    String module() default "";

    /**
     * 是否记录请求参数
     * @return true-记录，false-不记录
     */
    boolean recordParams() default true;

    /**
     * 是否记录返回结果
     * @return true-记录，false-不记录
     */
    boolean recordResult() default false;

    /**
     * 是否记录异常信息
     * @return true-记录，false-不记录
     */
    boolean recordException() default true;

    /**
     * 操作类型枚举
     */
    enum OperationType {
        /**
         * 查询操作
         */
        SELECT("查询"),
        /**
         * 新增操作
         */
        INSERT("新增"),
        /**
         * 修改操作
         */
        UPDATE("修改"),
        /**
         * 删除操作
         */
        DELETE("删除"),
        /**
         * 上传操作
         */
        UPLOAD("上传"),
        /**
         * 下载操作
         */
        DOWNLOAD("下载"),
        /**
         * 登录操作
         */
        LOGIN("登录"),
        /**
         * 登出操作
         */
        LOGOUT("登出"),
        /**
         * 其他操作
         */
        OTHER("其他");

        private final String description;

        OperationType(String description) {
            this.description = description;
        }

        public String getDescription() {
            return description;
        }
    }
}
